package com.bootdo.activity;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.junit.Before;
import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

/**
 *
 *  实例：
     比如，如果当前的流程实例正在执行“自荐信审批”，
     这个时候，自荐信审批没有任务执行人，
     因为审批人是可以很多个，无法确定到底是谁，
     只有当咨询员登录系统以后才能给该任务赋值执行人，
     即存在只要是咨询员登陆，
     那么就可以看到所有的“自荐信”。
     *
     * @author 郝江波
    　　* @date 2019/8/19 16:01
    　　*/
public class 多种情况三 {
    @Before
    public void testCreateTablesAutomaticallyWithoutConfigFiles() {
        // 创建流程引擎配置对象
        ProcessEngineConfiguration config = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
        // 设置jdbc连接参数信息
        config.setJdbcDriver("com.mysql.jdbc.Driver");
        config.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/new_frame_dubbo?useUnicode=true&characterEncoding=utf8");
        config.setJdbcUsername("root");
        config.setJdbcPassword("root");
        // 设置自动建表
        config.setDatabaseSchemaUpdate("true");
        // 使用配置对象创建流程引擎对象，创建对象过程中会自动建表
        ProcessEngine processEngine = config.buildProcessEngine();
    }


    /**
     * 部署流程
     */
    @Test
    public void startDeployTest(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        processEngine.getRepositoryService()
                .createDeployment()
                .name("请假流程：情况三")
                .addClasspathResource("Demo3.bpmn")
                .deploy();
    }


    /**
     * 启动流程实例
     *    可以设置一个流程变量
     */
    @Test
    public void testStartPI(){
        /**
         * 流程变量
         *   给<userTask id="请假申请" name="请假申请" activiti:assignee="#{student}"></userTask>
         *     的student赋值
         */
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("user", "小明");
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        processEngine.getRuntimeService()
                .startProcessInstanceById("流程3:1:45004",variables);
    }



    @Test
    public void testFinishTask_Teacher(){
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("user", "小明+1");
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        processEngine.getTaskService()
                .complete("60005", variables); //完成任务的同时设置流程变量
    }

}
